'''
    常见触发错误的情况
    如果传入的字段多了会自动过滤
    如果传入的少了会报错，必填字段
    如果传入的字段名称对不上也会报错
    如果传入的类型不对会自动转换，如果不能转换则会报错

    错误的触发
    pydantic 会在它正在验证的数据中发现错误时引发 ValidationError

    注意
    验证代码不应该抛出 ValidationError 本身
    而是应该抛出 ValueError、TypeError、AssertionError 或他们的子类
    ValidationError 会包含所有错误及其发生方式的信息


    访问错误的方式
    e.errors()：返回输入数据中发现的错误的列表
    e.json()：以 JSON 格式返回错误（推荐）
    str(e)：以人类可读的方式返回错误
'''
from typing import List

from pydantic import BaseModel, ValidationError, conint


class Person(BaseModel):
    id: int
    name: str


try:
    p = Person(id='ss', name='halle')
except ValidationError as e:
    print(e.errors())
    print("===============")
    print(e.json())
    print("===============")
    print(str(e))


class Location(BaseModel):
    lat = 0.1
    lng = 10.1


class Model(BaseModel):
    is_required: float
    gt_int: conint(gt=42)
    list_of_ints: List[int] = None
    a_float: float = None
